<?php 
namespace app\index\controller;
use think\Controller;
use think\Loader;
use think\Request;
use app\index\model\Notice as NoticeModel;

class Notice extends Controller {

    public function index() {
        "https://www.kancloud.cn/manual/thinkphp5/138667";
        $n1 = NoticeModel::get(1);
        $n1->nt_id = 4;
        $n1->save();

        $n2 = new NoticeModel();
        $n2 = $n2->get(1);
        $n2->nt_id = 3;
        $n2->save();

        $n3 = Loader::model('Notice')->get(1);       
        $n3->nt_id = 2;
        $n3->save();
        
        $n4 = model('notice')->get(1);
        $n4->nt_id = 1;
        $n4->save();

        var_dump($n4);
    }

    public function add() {
        $request = Request::instance();
        if($request->get('a') != 1) {
            return 'false';
        }

        // $notice = new NoticeModel();
        // $notice->data([
        //     'nt_id' => 3,
        //     'title' => '大个表',
        //     'content' => '一个手戴不过来',
        //     'create_time' => time()
        // ]);
        // $notice->nt_id = 3;
        // $notice->title = '大个表';
        // $notice->content = '一个手戴不过来';
        // $notice->create_time = time();
        // // $notice->allowField(true); // 或指定一个字段数组表明只操作这几个字段
        // $notice->save();
        // echo $notice->id; // 查询ID会造成多添加数据

        // $notice2 = NoticeModel::create([
        //     'nt_id' => 3,
        //     'title' => '大个表',
        //     'content' => '一个手戴不过来'
        // ]);

        // echo $notice2->title; // 查询其他字段也会造成重复添加数据

        // 更新使用相同方法，前提是指定数据ID
        // $n3 = new NoticeModel();
        // $n3->allowField(true); // 依然可以过滤字段
        // $n3->save([
        //     'nt_id' => 2,
        //     'title' => '小个表',
        //     'content' => '一个手戴不过来',
        //     'create_time' => time()
        // ], ['id' => 40]);
        
        // 无法使用模型的事件功能
        // $n4 = new NoticeModel();
        // $n4->where(['id'=>41]);
        // $n4->update([
        //     'title' => '挂表'
        // ]);
        
        // $n5 = new NoticeModel();
        // $n5->save(['nt_id'=>1], function($query) {
        //     // $query->where("id % 5", 'eq', 0);
        //     $query->where('id', 'eq', 42);
        // });
        
        $n6 = new NoticeModel();
        $n6->isUpdate(true); // 指定为更新数据模式，false为指定新增数据模式

        // $n6->data(['nt_id'=>3]);

        $n6->save(['nt_id'=>3], function($query) {
            $query->where(['id'=>43]);
        });

    }

    public function delete() {

        $n = new NoticeModel();
        // $n->delete();

        // NoticeModel::destroy([1,2,3]);
        // NoticeModel::destroy(['id'=>1]);
        // NoticeModel::destroy(function($query) {
        //     $query->where('id', 1);
        // });
        
        NoticeModel::destroy(42); // 软删除不能用delete，应该是bug
        var_dump($n->where(['id'=>42])->find());

        var_dump($n->withTrashed()->select()); // 查包含软删除的数据
        var_dump($n->onlyTrashed()->select()); // 只查软删除数据

    }

    public function sel() {
        $n = NoticeModel::getByNtId(1);
        $n->toArray(); // 获取全部处理后的数据数组
        $n->hidden(['status']) // 不显示的字段
          ->append(['status']) // 追加自定义字段，获取器有效
          ->visible(['status']) // 允许输出的属性
          ->appendRelationAttr('notice_type', ['name']) // 关联数据到结果里
          ->toArray();
        // 助手函数调用toArray，将结果放至函数中
        collection($data)->toArray();
        // $n->getData('status'); // 获取原始数据 

        $n->toJson();
        // 或
        json_encode($n);
        // 或
        echo $n;

        // 调用模型类中定义的查询条件
        // var_dump(NoticeModel::scope('ntid', 3)->select());
        // 或
        // $n1 = new NoticeModel;
        // var_dump($n1->ntid(3)->select());
        
        // NoticeModel::useGlobalScope(false)->select(); // 不使用全局查询处理方法

    }

    public function logic() {
        Loader::model('Notice');
        Loader::model('Notice', 'logic');
        Loader::model('Notice', 'service');
    }

    // 事件
    public function event() {

        // before类事件返回false则不发生操作，最好写在init函数中
        NoticeModel::event('before_insert', function($data) {

        });

    }

    // 安全输入
    public function safe() {
        stripslashes();
        htmlentities();
        htmlspecialchars();
        strip_tags();
    }

}